package com.cindata

class Menu
{
    String title
    String url
    String activeUrl
    String icon

    Menu parent
    Integer orderNum
    Integer status
    //1:启用 2：禁用
    Date createdDate = new Date()
    Date modifiedDate = new Date()
    User createBy
    User modifyBy
    static hasMany = [children: Menu]
    static belongsTo = [parent: Menu]

    static transients = ['allChildren']

    def getAllChildren()
    {
        children ? children + children*.allChildren.flatten() : []
    }

    def shouldActive(String targetUrl)
    {
        if (targetUrl.indexOf(url) > -1)
        {
            return 'active'
        }
        children.each { cmenu ->
            if (targetUrl.indexOf(cmenu.url) > -1)
            {
                return 'active'
            }
        }
        return ''
    }
    def springSecurityService

    def beforeInsert()
    {
        def username = springSecurityService?.getPrincipal()?.username
        createBy = User.findByUsername(username)
    }

    def beforeUpdate()
    {
        modifiedDate = new Date()
        def username = springSecurityService?.getPrincipal()?.username
        modifyBy = User.findByUsername(username)
    }
    static constraints = 
    {
        title maxSize: 50, blank: false, nullable: false
        url maxSize: 50, blank: true, nullable: true
        activeUrl maxSize: 50, blank: true, nullable: true, comment: '菜单激活url'
        parent blank: true, nullable: true
        orderNum blank: true, nullable: true
        status blank: true, nullable: true
        icon maxSize: 50, blank: true, nullable: true

        createBy blank: true, nullable: true
        createdDate blank: true, nullable: true
        modifyBy blank: true, nullable: true
        modifiedDate blank: true, nullable: true
    }
    static mapping = {
        sort orderNum: 'asc'
        parent lazy: false
        autowire true
    }

    String toString()
    {
        if (parent?.title)
        {
            "${title}(${parent?.title})"
        }
        else
        {
            "${title}"
        }
    }

    def setValues(map)
    {
        map.each { key, value -> this."${key}" = value
        }
    }

    /*
    * 初始化菜单数据
    */
    static initData()
    {
        def menu,cmenu
        def orderNum = 0
        def user = User.findByUsername('admin')

        // 首页
        menu = Menu.findByTitle('首页')
        if (!menu){
            menu = new Menu()
        }
        menu.properties = [title: '首页', url: '/main/index', activeUrl: '/main/', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()


        // 台账管理
        menu = Menu.findByTitle('台账管理')
        if (!menu){
            menu = new Menu()
        }
        menu.properties =[title: '台账管理', url: '#', activeUrl: '/estate/', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()


        cmenu = Menu.findByTitle('押品台账')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '押品台账', url: '/collateral/collateralList', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        // 贷款
        cmenu = Menu.findByTitle('贷款台账')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '贷款台账', url: '/mortgage/index',status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        // 借款人
        cmenu = Menu.findByTitle('借款人台账')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '借款人台账', url: '/contact/contactList',status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        // 风险预警
        menu = Menu.findByTitle('风险预警')
        if (!menu){
            menu = new Menu()
        }
        menu.properties = [title: '风险预警', url: '/riskWarning/riskWarningIndex', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()


        // 不良资产管理
        menu = Menu.findByTitle('不良资产管理')
        if (!menu){
            menu = new Menu()
        }
        menu.properties = [title: '不良资产管理', url: '#', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()

        cmenu = Menu.findByTitle('代办预警')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '代办预警', url: '/riskWarning/contactOverdueWarningIndex', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('预警列表')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '预警列表', url: '/riskWarning/contactOverdueWarning', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('资产包待办')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '资产包待办', url: '/abnormalMortgageBatch/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('资产包列表')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '资产包列表', url: '/abnormalMortgageBatch/index?flag=true', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        // 资产分析
        menu = Menu.findByTitle('资产分析')
        if (!menu){
            menu = new Menu()
        }
        menu.properties =[title: '资产分析', url: '#',  status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()

        cmenu = Menu.findByTitle('压力分析')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '压力分析', url: '/assessAnalyze/stressAnalyze', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('净值分析')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '净值分析', url: '/assessAnalyze/netValueAnalyze', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('报表')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '报表', url: '/analyze/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('报告')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '报告', url: '/analyze/report', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('全量分析报告')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '全量分析报告', url: '/analyze/fullQuantityReport', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()


        // 地图
        menu = Menu.findByTitle('地图展示')
        if (!menu){
            menu = new Menu()
        }
        menu.properties =[title: '地图展示', url: '#', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()

        cmenu = Menu.findByTitle('全量押品')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '全量押品', url: '/newMap/heatmap', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('不良资产')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '不良资产', url: '/newMap/nonPerformingAsset', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('网点地图')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '网点地图', url: '/newMap/website', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        // 开发商查询
        menu = Menu.findByTitle('开发商管理')
        if (!menu){
            menu = new Menu()
        }
        menu.properties =[title: '开发商管理', url: '#', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()

        cmenu = Menu.findByTitle('开发商查询')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '开发商查询', url: '/developer/search', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('入围开发商')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '入围开发商', url: '/developer/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()


        // 评估
        menu = Menu.findByTitle('押品复估')
        if (!menu){
            menu = new Menu()
        }
        menu.properties =[title: '押品复估', url: '#', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()

        cmenu = Menu.findByTitle('单笔估值')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '单笔估值', url: '/assess/assess', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('单笔记录')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '单笔记录', url: '/assess/history', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('批量复估')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '批量复估', url: '/estate/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('复估记录')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '复估记录', url: '/valuationHistory/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('批次管理')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '批次管理', url: '/estateImportBatch/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('机构评估')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '机构评估', url: '/estateImportBatch/evaluateAccountBatchIndex', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()


        // 系统管理
        menu = Menu.findByTitle('系统管理')
        if (!menu){
            menu = new Menu()
        }
        menu.properties =[title: '系统管理', url: '#', activeUrl: '/user/', status: 1, createBy: user, parent: null, orderNum: ++orderNum]
        menu.save()

        cmenu = Menu.findByTitle('组件')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '组件', url: '/component/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('工作流')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '工作流', url: '/workflow/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('页面布局')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '页面布局', url: '/layout/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('数据导入')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '数据导入', url: '/estateImportBatch/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('用户管理')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '用户管理', url: '/user/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('登录明细')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '登录明细', url: '/loginHistory/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('机构管理')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '机构管理', url: '/account/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('角色管理')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '角色管理', url: '/roleMenu/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('数据迁移')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '数据迁移', url: '/dataMigration/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('地图绘制')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '地图绘制', url: '/precinct/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('数据字典')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '数据字典', url: '/dataDict/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('费用统计')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '费用统计', url: '/userCost/userCostStatistics', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('楼盘打分配置')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '楼盘打分配置', url: '/communityScoreWeight/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('风险预警配置')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '风险预警配置', url: '/riskWarningConfig/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()

        cmenu = Menu.findByTitle('风险等级配置')
        if (!cmenu){
            cmenu = new Menu()
        }
        cmenu.properties =[title: '风险等级配置', url: '/riskWarningLevel/index', status: 1, createBy: user, parent: menu, orderNum: ++orderNum]
        cmenu.save()
    }
}
